package com.lxp.base.net.okhttp;

/**
 * @author liuxiaopeng
 * @version V1.0.0
 * @time 2016/12/4
 * @describe
 */

public class OkHttp {
//    private static volatile OkHttp instance;
//    private OkHttpClient client;
//    private static final long cacheSize = 10 * 1024 * 1024; // 10 MiB
//    private static final String cacheDirectoryStr = SDCardUtils.getSDCardPath() + "/yonyou/cache";
//
//    /**
//     * 上传文件 类型
//     */
//    private static final MediaType MEDIA_OBJECT_STREAM = MediaType.parse("application/octet-stream");
//
//
//    private OkHttp() {
//        OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
//        clientBuilder.connectTimeout(40, TimeUnit.SECONDS);
//        clientBuilder.writeTimeout(40, TimeUnit.SECONDS);
//        clientBuilder.readTimeout(40, TimeUnit.SECONDS);
//        clientBuilder.addNetworkInterceptor(new Interceptor() {
//            @Override
//            public Response intercept(Chain chain) throws IOException {
//
//                Response originalResponse = chain.proceed(chain.request());
//                return originalResponse.newBuilder()
//                        .body(new ProgressResponseBody(originalResponse.body(), new ProgressListener(this)))
//                        .build();
//            }
//        });
//
//        clientBuilder.cache(initCache());
//        client = clientBuilder.build();
//    }
//
//    private Cache initCache() {
//        File cacheDirectory = new File(cacheDirectoryStr);
//        return new Cache(cacheDirectory, cacheSize);
//    }
//
//    public static OkHttp getInstance() {
//        synchronized (OkHttp.class) {
//            if (null == instance) {
//                instance = new OkHttp();
//            }
//        }
//        return instance;
//    }
//
//    @Override
//    public void send(String url, BaseParams params, BaseCallBack callBack) {
//        Flowable.create((FlowableOnSubscribe<String>) flowableEmitter -> {
//            try {
//                Logger.d("请求开始：" + url);
//                Logger.d("请求参数：" + params);
//                Request.Builder requestBuilder = new Request.Builder();
//                requestBuilder.tag(callBack);
//                //POST请求 参数添加
//                if (HttpModelType.POST == params.getModelType()) {
//                    MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder();
//                    multipartBodyBuilder.setType(MultipartBody.FORM);
//                    if (!params.isEmpty()) {
//                        Set<String> keys = params.keySet();
//                        for (String key : keys) {
//                            Object value = params.get(key);
//                            if (value instanceof String) {
//                                String v = value.toString();
//                                multipartBodyBuilder.addFormDataPart(String.valueOf(key), String.valueOf(v));
//                            } else if (value instanceof File) {//上传文件
//                                File file = (File) value;
//                                RequestBody fileBody = RequestBody.create(MEDIA_OBJECT_STREAM, file);
//                                multipartBodyBuilder.addFormDataPart(key, file.getName(), fileBody);
//                            } else {
//                                String v = value.toString();
//                                multipartBodyBuilder.addFormDataPart(key, v);
//                            }
//                        }
//                    }
//                    RequestBody requestBody = multipartBodyBuilder.build();
//                    requestBuilder.post(requestBody);
//                    requestBuilder.url(url);
//
//                    //GET请求 参数添加
//                } else if (HttpModelType.GET == params.getModelType()) {
//                    Set<String> keys = params.keySet();
//                    String getUrl = url.endsWith("?") ? url : url + "?";
//                    //拼接参数
//                    for (String key : keys) {
//                        String value = (String) params.get(key);
//                        getUrl += key + "=" + value + "&";
//                    }
//                    getUrl = getUrl.endsWith("&") ? getUrl.substring(0, getUrl.length() - 1) : getUrl;
//                    requestBuilder.get();
//                    requestBuilder.url(getUrl);
//                }
//
//                //添加请求头
//                addHeads(requestBuilder, params.getHeands());
//
//
//                //CacheControl.FORCE_CACHE强制使用缓存
//                if (params.isCache) {
//                    //缓存10分钟
//                    requestBuilder.cacheControl(new CacheControl.Builder().maxStale(params.cacheTime, TimeUnit.SECONDS).build());
//                } else {
//                    //FORCE_NETWORK 不使用缓存
//                    requestBuilder.cacheControl(CacheControl.FORCE_NETWORK);
//                }
//
//
//                //异步请求开启
//                Request request = requestBuilder.build();
//
//                client.newCall(request).enqueue(new Callback() {
//                    @Override
//                    public void onFailure(Call call, IOException e) {
//                        flowableEmitter.onError(e);
//                    }
//
//                    @Override
//                    public void onResponse(Call call, Response response) throws IOException {
//                        String bodyStr = response.body().string();
//                        Logger.d("请求结束：" + call.request().url());
//                        if (response.isSuccessful()) {
//                            Logger.json(bodyStr);
//                            flowableEmitter.onNext(bodyStr);
//                        } else {
//                            Logger.e(bodyStr);
//                            flowableEmitter.onError(new Throwable(bodyStr));
//                        }
//                    }
//                });
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }, BackpressureStrategy.ERROR).subscribeOn(Schedulers.newThread())//子线程运行
//                .observeOn(AndroidSchedulers.mainThread())//UI线程执行
//                .subscribe(new Subscriber<String>() {
//                    private Subscription mSubscription;
//
//                    @Override
//                    public void onSubscribe(Subscription s) {
//                        s.request(Long.MAX_VALUE);
//                        mSubscription = s;
//                    }
//
//                    @Override
//                    public void onNext(String s) {
//                        callBack.isSuccess(s, null);
//                        mSubscription.cancel();
//                    }
//
//                    @Override
//                    public void onError(Throwable t) {
//                        callBack.isFail(t);
//                    }
//
//                    @Override
//                    public void onComplete() {
//
//                    }
//                });
//    }
//
//    /**
//     * 添加请求头
//     *
//     * @param requestBuilder
//     * @param hears
//     */
//    private void addHeads(Request.Builder requestBuilder, Map<String, String> hears) {
//        Set<String> keys = hears.keySet();
//        for (String key : keys) {
//            requestBuilder.addHeader(key, hears.get(key));
//        }
//    }

}
